\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mer. juin 18 14:33:10 CEST 2014}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={Kerberos - Installer les KDC},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Introduction à la configuration initiale des KDC},
CreationDate={D:20140618143310},
ModDate={D:20140618143310},
Keywords={Kerberos;sécurité;authentification}
}}
\begin{document}
 
\begin{center}
{\Huge Kerberos - Installer les KDC }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Introduction à la configuration initiale des KDC}
 
\vspace{10mm}
 
\hspace{1mm}  En implémentant Kerberos dans un environnement de production, il est préférable d'avoir plusieurs KDC esclave avec un KDC maître pour s'assurer de la disponibilité continue des service kerberisés. Chaque KDC contient une copie de la base de donnée Kerberos. Le KDC maître contient la copie modifiable de la base, qui est répliquée au esclaves à intervalle régulier. Tous les changements de base sont faites sur le maître. Les esclave fournissent les services TGS, mais pas d'administration de la base, quand le KDC maître n'est pas disponible. Le MIT recommande d'installer tous les KDC pour être en mesure de fonctionner soit en tant que maître ou un esclave. Celà permet de facilement basculer un esclave en maître si nécessaire.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Attention }
 
\
 
\hspace{1mm}  Le système Kerberos s'appuyent du la disponibilité des informations de temps correcte, assurez vous que le maître et les esclaves ont une horloge synchronisée correctement. Il est préférable d'installer les KDC sur du hardware dédié et sécurisé avec un accès limité.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Installer et configurer le KDC maître }
 
\
 
\hspace{1mm} Dans ce document, nous utilisons les noms suivants:
 
{\ttfamily
kerberos.mit.edu\_\_\_\_-\_master KDC\\ kerberos-1.mit.edu\_\_-\_slave KDC\\ ATHENA.MIT.EDU\_\_\_\_\_\_-\_realm name\\ .k5.ATHENA.MIT.EDU\_\_-\_stash file\\ admin/admin\_\_\_\_\_\_\_\_\_-\_admin principal\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Éditer les fichiers de configuration du KDC }
 
\
 
\hspace{1mm}  Modifier les fichiers de configuration, \textbf{krb5.conf} et \textbf{kdc.conf}, pour refléter les informations telles que le mappage domain-realm et les noms des serveurs kerberos. Beaucoup de tags dans la configuration ont des valeurs par défaut qui sont adéquat à la plupart des sites. Les variables \textbf{KRB5\_CONFIG} et \textbf{KRB5\_KDC\_PROFILE} permettent de spécifier les fichiers altérnatifs:
\vspace{5mm} \\
 
 
{\ttfamily
export KRB5\_CONFIG=/yourdir/krb5.conf\\ export KRB5\_KDC\_PROFILE=/yourdir/kdc.conf\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge krb5.conf }
 
\
 
\hspace{1mm}  Si vous n'utilisez pas les enregistrements DNS TXT, vous devez spécifier le \textbf{default\_realm} dans la section \textbf{[libdefault]}. Si vous n'utilisez par les enregistrements DNS SRV, vous devez inclure le tag \textbf{kdc} pour chaque realm dans la section \textbf{[realms]}. Pour communiquer avec le serveur kadmin dans chaque realm, le tag \textbf{admin\_server} doit être définis dans la section \textbf{[realms]}.
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple de fichier krb5.conf
 
{\ttfamily
\texttt{[}libdefaults\texttt{]}\\ \hspace{2mm}default\_realm = ATHENA.MIT.EDU\\ \hspace{2mm}\\ \texttt{[}realms\texttt{]}\\ \hspace{2mm}ATHENA.MIT.EDU = \{\\ \hspace{2mm}\hspace{2mm}kdc = kerberos.mit.edu\\ \hspace{2mm}\hspace{2mm}kdc = kerberos-1.mit.edu\\ \hspace{2mm}\hspace{2mm}admin\_server = kerberos.mit.edu\\ \hspace{2mm}\}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge kdc.conf }
 
\
 
\hspace{1mm}  Ce fichier peut être utilisé pour contrôler les ports d'écoute du KDC en de kadmind, et les paramètres par défaut spécifique au realm, le type de base et son emplacement et le logging.
\vspace{5mm} \\
 
 
\hspace{1mm} Exemple de fichier kdc.conf
 
{\ttfamily
\texttt{[}kdcdefaults\texttt{]}\\ \hspace{2mm}kdc\_ports = 88,750\\ \texttt{[}realms\texttt{]}\\ \hspace{2mm}ATHENA.MIT.EDU = \{\\ \hspace{2mm}\hspace{2mm}kadmind\_port = 749\\ \hspace{2mm}\hspace{2mm}max\_life = 12h 0m 0s\\ \hspace{2mm}\hspace{2mm}max\_renewable\_life = 7d 0h 0m 0s\\ \hspace{2mm}\hspace{2mm}master\_key\_type = aes256-cts\\ \hspace{2mm}\hspace{2mm}supported\_enctypes = aes256-cts:normal aes128-cts:normal\\ \hspace{2mm}\hspace{2mm}\# If the default location does not suit your setup,\\ \hspace{2mm}\hspace{2mm}\# explicitly configure the following values:\\ \hspace{2mm}\hspace{2mm}\#\hspace{2mm}database\_name = /var/krb5kdc/principal\\ \hspace{2mm}\hspace{2mm}\#\hspace{2mm}key\_stash\_file = /var/krb5kdc/.k5.ATHENA.MIT.EDU\\ \hspace{2mm}\hspace{2mm}\#\hspace{2mm}acl\_file = /var/krb5kdc/kadm5.acl\\ \hspace{2mm}\}\\ \texttt{[}logging\texttt{]}\\ \hspace{2mm}\# By default, the KDC and kadmind will log output using\\ \hspace{2mm}\# syslog. You can instead send log output to files like this:\\ \hspace{2mm}kdc = FILE:/var/log/krb5kdc.log\\ \hspace{2mm}admin\_server = FILE:/var/log/kadmin.log\\ \hspace{2mm}default = FILE:/var/log/krb5lib.log\\
}
\vspace{8mm}
 
\hspace{1mm}  Remplacer \textbf{ATHENA.MIT.EDU} et \textbf{kerberos.mit.edu} avec le nom de votre domaine et serveur Kerberos, respectivement.
\vspace{5mm} \\
\hspace{1mm}  Note: vous devez avoir les droits d'écriture sur les répertoires cibles ( et doivent exister ) utilisés par \textbf{database\_name}, \textbf{key\_stash\_file}, et \textbf{acl\_file}.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Créer la base KDC }
 
\
 
\hspace{1mm}  Il faut utiliser la commande \textbf{kdb5\_util} sur le KDC maître pour créer la base Kerberos et le fichier optionnel \textbf{stash}.
\vspace{5mm} \\
\hspace{1mm}  Note: Si vous choisissez de ne pas installer un fichier stash, le KDC va vous demander la clé maître chaque fois qu'il démarre.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{kdb5\_util} va vous demander le mot de passe maître pour la base Kerberos. L'exemple suivant montre comment créer une base Kerberos et le fichier stash sur le KDC maître.
\vspace{5mm} \\
 
 
{\ttfamily
shell\% kdb5\_util create -r ATHENA.MIT.EDU -s\\ \hspace{2mm}\\ Initializing database '/usr/local/var/krb5kdc/principal' for realm 'ATHENA.MIT.EDU',\\ master key name 'K/M@ATHENA.MIT.EDU'\\ You will be prompted for the database Master Password.\\ It is important that you NOT FORGET this password.\\ Enter KDC database master key: <= Type the master password.\\ Re-enter KDC database master key to verify: <= Type it again.\\ shell\%\\
}
\vspace{8mm}
 
\hspace{1mm}  Cela va créer 5 fichiers dans \textbf{LOCALSTATEDIR/krb5kdc} ( ou l'emplacement spécifié dans kdc.conf ):
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{2 fichiers de base de données, \textbf{principal} et \textbf{principal.ok}}
\item[\hspace{6mm} -]{Le fichier de base de données administrative, \textbf{principal.kadm5}}
\item[\hspace{6mm} -]{Le fichier de lock de la base administrative, \textbf{principal.kadm5.lock}}
\item[\hspace{6mm} -]{Le fichier stash, dans cet exemple \textbf{.k5.ATHENA.MIT.EDU}. utiliser l'option \textbf{-s} pour ne pas générer ce fichier.}
\end{description}
 
\vspace{1cm}{\huge Ajouter les administrateurs au fichier d'ACL }
 
\
 
\hspace{1mm}  Ensuite, vous devez créer un fichier d'acl et y placer le principal Kerberos d'au moins un administrateur. Ce fichier est utilisé par \textbf{kadmind} pour contrôler quel principaux peuvent voir et effectuer des modifications privilégiées dans les fichiers de base Kerberos. Le nom du fichier d'acl est déterminé par la variable \textbf{acl\_file} dans \textbf{kdc.conf} ( défaut: LOCALSTATEDIR/krb5kdc/kadm5.acl )
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Ajouter les administrateurs à la base kerberos }
 
\
 
\hspace{1mm}  Vous devez ajouter les principaux administratifs à la base de données Kerberos. Vous devez ajouter au moins un principal pour permettre la communication entre \textbf{kadmind} et \textbf{kadmin} sur le réseaux. Pour cela, utiliser l'utilitaire \textbf{kadmin.local} sur le KDC maître. Il est conçus pour être lancé sur un KDC maître sans utiliser d'authentification Kerberos. Vous devez avoir un accès en lecture/écriture à la base Kerberos.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les principaux administratifs que vous créez devraient être ceux ajoutés dans le fichier d'acl.
\vspace{5mm} \\
 
 
\hspace{1mm} Dans l'exemple suivant, le principal administratif admin/admin est créé:
 
{\ttfamily
shell\% kadmin.local\\ \hspace{2mm}\\ kadmin.local: addprinc admin/admin@ATHENA.MIT.EDU\\ \hspace{2mm}\\ WARNING: no policy specified for "admin/admin@ATHENA.MIT.EDU";\\ assigning "default".\\ Enter password for principal admin/admin@ATHENA.MIT.EDU: <= Enter a password.\\ Re-enter password for principal admin/admin@ATHENA.MIT.EDU: <= Type it again.\\ Principal "admin/admin@ATHENA.MIT.EDU" created.\\ kadmin.local:\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Démarrer le service Kerberos sur le KDC maître }
 
\
 
\hspace{1mm} À ce point, vous êtes prêt à démarrer le KDC (krb5kdc) et les services administratifs sur le KDC maître: \\
\hspace{1mm} \textbf{shell\% krb5kdc} \\
\hspace{1mm} \textbf{shell\% kadmind} \\
 
\hspace{1mm}  Chaque service va se forker en tâche de fond.
\vspace{5mm} \\
 
 
\hspace{1mm} Vous pouvez vérifier qu'ils sont lancés correctement en vérifiant les messages de démarrage dans les emplacement le logging spécifiés dans krb5.conf:
 
{\ttfamily
shell\% tail /var/log/krb5kdc.log\\ Dec 02 12:35:47 beeblebrox krb5kdc\texttt{[}3187\texttt{]}(info): commencing operation\\ shell\% tail /var/log/kadmin.log\\ Dec 02 12:35:52 beeblebrox kadmind\texttt{[}3189\texttt{]}(info): starting\\
}
\vspace{8mm}
 
\hspace{1mm} En vérification additionnelle, vérifier si kinit réussit avec les principaux administratifs:
 
{\ttfamily
shell\% kinit admin/admin@ATHENA.MIT.EDU\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Installer les KDC esclave }
 
\
 
\hspace{1mm}  Maintenant vous être prêt à configurer les KDC esclaves.
\vspace{5mm} \\
\hspace{1mm}  Note: en assumant que vous paramètrez le KDC de manière à facilement basculer le maître avec un des esclaves, vous devriez effectuer chaque étape sur de maître sur les esclaves, sauf les ces instructions spécifient le contraire.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Créer les keytabs pour les KDC esclave }
 
\
 
\hspace{1mm}  Chaque KDC a besoin d'un clé \textbf{host} dans la base Kerberos. Ces clés sont utilisée pour l'authentification mutuelle lors de la propagation des dump de la base de donnée depuis le maître.
\vspace{5mm} \\
 
 
\hspace{1mm}  Sur le KDC maître, se connecter à l'interface administrative et créer le principal de l'hôte pour chaque service \textbf{host} des KDC. Par exemple, si le maître s'appel \textbf{kerberos.mit.edu}, et l'esclave s'appel \textbf{kerberos-1.mit.edu}:
\vspace{5mm} \\
 
 
{\ttfamily
shell\% kadmin\\ kadmin: addprinc -randkey host/kerberos.mit.edu\\ NOTICE: no policy specified for "host/kerberos.mit.edu@ATHENA.MIT.EDU"; assigning "default"\\ Principal "host/kerberos.mit.edu@ATHENA.MIT.EDU" created.\\ \hspace{2mm}\\ kadmin: addprinc -randkey host/kerberos-1.mit.edu\\ NOTICE: no policy specified for "host/kerberos-1.mit.edu@ATHENA.MIT.EDU"; assigning "default"\\ Principal "host/kerberos-1.mit.edu@ATHENA.MIT.EDU" created.\\
}
\vspace{8mm}
 
\hspace{1mm}  Il n'est pas nécessaire d'avoir le maître dans la base Kerberos, mais peut être nécessaire si vous souhaitez basculer le maître en esclave. Ensuite, extraire chaque clé \textbf{host} pour tous les KDC participants et les stocker dans chaque fichier keytab de l'hôte. Idéalement, vous devriez extraire chaque keytab localement dans son propre KDC. Si cela n'est pas faisable, vous devriez utiliser une session chiffrée pour les envoyer sur le réseau. Pour extraire un keytab sur un serveur esclave:
\vspace{5mm} \\
 
 
{\ttfamily
kadmin: ktadd host/kerberos-1.mit.edu\\ Entry for principal host/kerberos-1.mit.edu with kvno 2, encryption\\ \hspace{2mm}type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.\\ Entry for principal host/kerberos-1.mit.edu with kvno 2, encryption\\ \hspace{2mm}type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.\\ Entry for principal host/kerberos-1.mit.edu with kvno 2, encryption\\ \hspace{2mm}type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.\\ Entry for principal host/kerberos-1.mit.edu with kvno 2, encryption\\ \hspace{2mm}type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Configurer les KDC esclave }
 
\
 
\hspace{1mm}  La propagation de la base de données copie le contenu de la base du maître, mais ne propage pas les fichiers de configuration, les fichiers stash, ou le fichier d'acl. Les fichiers suivants doivent être copiés à la main pour chaque esclave:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} -]{krb5.conf}
\item[\hspace{6mm} -]{kdc.conf}
\item[\hspace{6mm} -]{kadm5.acl}
\item[\hspace{6mm} -]{master key stash file}
\end{description}
 
\hspace{1mm}  Déplacer les fichiers copiés dans leur répertoires appropriés, exactement comme sur le KDC maître. La base est propagée du maître vers les esclaves via le service \textbf{kpropd}. Vous devez explicitement spécifier les principaux qui sont autorisé à fournir les mises à jours Kerberos sur les esclaves avec une nouvelle base de données. Créer un fichier nommé \textbf{kpropd.acl} dans le répertoire d'état KDC contenant les principaux \textbf{host} pour chaque KDC:
\vspace{5mm} \\
 
 
{\ttfamily
host/kerberos.mit.edu@ATHENA.MIT.EDU\\ host/kerberos-1.mit.edu@ATHENA.MIT.EDU\\
}
\vspace{8mm}
 
\hspace{1mm}  Note: si vous souhaitez que le maître et l'esclave puis être inversés, listez les principaux hôtes depuis tous les KDC participants dans les fichiers \textbf{kpropd.acl} dans tous les KDC. Sinon, vous avez seulement besoin de lister le principal de l'hôte du KDC maître dans \textbf{kpropd.acl} des KDC esclaves.
\vspace{5mm} \\
 
 
\hspace{1mm} Ensuite, ajoutez la ligne suivante dans \textbf{/etc/inetd.conf} dans chaque KDC:
 
{\ttfamily
krb5\_prop 754/tcp \# Kerberos slave propagation\\
}
\vspace{8mm}
 
\hspace{1mm}  Redémarrez inetd. Alternativement, démarrer \textbf{kpropd} comme service standalone. Cela est nécessaire quand la propagation incrémental est activé.
\vspace{5mm} \\
 
 
\hspace{1mm}  Maintenant que le KDC est capable d'accepter la propagation de la base, vous avez besoin de propager la base depuis le maître. Note: Ne pas démarrer le KDC esclave avant d'avoir une copie du maître.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Propager la base à chaque esclave }
 
\
 
\hspace{1mm} Premièrement, créer un fichier dump de la base sur le maître: \\
\hspace{1mm} \textbf{shell\% kdb5\_util dump /usr/local/var/krb5kdc/slave\_datatrans} \\
\hspace{1mm} Puis, propager manuellement la base à chaque esclave: \\
\hspace{1mm} \textbf{shell\% kprop -f /usr/local/var/krb5kdc/slave\_datatrans kerberos-1.mit.edu} \\
\hspace{1mm} \textbf{Database propagation to kerberos-1.mit.edu: SUCCEEDED} \\
 
\hspace{1mm}  Vous aurez besoin d'un script pour dumper et propager la base. voici un exemple de script shell. Rappelez vous que vous avez besoin de remplacer \textbf{/usr/local/var/krb5kdc} avec le nom du répertoire d'état KDC.
\vspace{5mm} \\
 
 
{\ttfamily
\#!/bin/sh\\ \hspace{2mm}\\ kdclist = "kerberos-1.mit.edu kerberos-2.mit.edu"\\ \hspace{2mm}\\ kdb5\_util dump /usr/local/var/krb5kdc/slave\_datatrans\\ \hspace{2mm}\\ for kdc in \$kdclist\\ do\\ \hspace{2mm}kprop -f /usr/local/var/krb5kdc/slave\_datatrans \$kdc\\ done\\
}
\vspace{8mm}
 
\hspace{1mm} Vous avez besoin du définir un cron pour lancer ce script à intervalle régulier. Maintenant que l'esclave a une copie de la base Kerberos, vous pouvez démarrer krb5kdc:
 
{\ttfamily
shell\% krb5kdc\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Erreurs de propagation }
 
\
 
\hspace{1mm} kprop: No route to host while connecting to server \\
\hspace{1mm} \textbf{Assurez vous que le nom d'hôte de l'esclave est correct et que les firewalls entre le maître et l'esclave autorisent le port 754.} \\
\hspace{1mm} kprop: Connection refused while connecting to server \\
\hspace{1mm} \textbf{Si l'esclave tente de lancer kpropd via inetd, assurez vous que inetd est configuré pour accepter les connections krb5\_prop. inetd a besoin de relire sa configuration pour qu'un changement soit pris en compte.} \\
\hspace{1mm} kprop: Server rejected authentication (during sendauth exchange) while authenticating to server \\
\hspace{1mm} \textbf{assurez vous que:} \\
 
\begin{description} \normalsize
\item[\hspace{6mm} 1.]{L'heure est synchonisée}
\item[\hspace{6mm} 2.]{Le fichier stash du maître a été copié sur l'esclave à l'emplacement attendu}
\item[\hspace{6mm} 3.]{L'esclave a un fichier keytab contenant un principal \textbf{host} pour le nom d'hôte de l'esclave.}
\end{description}
 
\vspace{1cm}{\huge Ajouter des principaux à la base }
 
\
 
\hspace{1mm}  Une fois les KDC définis et fonctionnels, vous êtes prêt à utiliser \textbf{kadmin} pour charger les principaux pour vos utilisateurs, hôtes, et autres services dans la base kerberos. Vous pouvez occasionnellement utiliser un des esclaves comme maître. Cela peut se produire si vous mettez à jour le maître, ou si le maître crash.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Basculer de maître et d'esclave }
 
\
 
\hspace{1mm}  Si le KDC maître fonctionne, effectuez les étapes suivantes sur l'ancien maître:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} 1.]{Tuer kadmind}
\item[\hspace{6mm} 2.]{Désactiver le job cron qui propage la base}
\item[\hspace{6mm} 3.]{Lancer le script de propagation manuellement, pour s'assurer que tous les esclaves ont la dernière copie de la base.}
\end{description}
 
\hspace{1mm}  Sur le nouveau maître:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} 1.]{Démarrer \textbf{Kadmind}}
\item[\hspace{6mm} 2.]{Définir un cron pour propager la base}
\item[\hspace{6mm} 3.]{Bascules les CNAME de l'ancien vers le nouveau maître. Si vous ne pouvez pas le faire, vous aurez besoin de changer le fichier \textbf{krb5.conf} sun chaque client dans le domaine kerberos.}
\end{description}
\end{flushleft}
\end{document}
